package cn.tedu.pic.service;

import cn.HK.utils.UploadUtil;
import cn.HK.vo.PicUploadResult;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

@Service
public class PicService {
    /*
        1 准备即将封装上传图片生成的url属性的result对象
        2 检验一下上传的图片文件 是不是图片类型的后缀
        3 为了不让一个文件夹集中存储大量图片,为每一个图片生成单独的路径(优化效率)
        4 生成多级路径,随机生成修改图片名
        5 根据url图片地址生成访问路径
        6 返回封装url
     */

    public PicUploadResult picUpload(MultipartFile pic) {
        PicUploadResult result = new PicUploadResult();
        //校验后缀
        String eName = pic.getOriginalFilename();
        //截取后缀 .png .jpg .gif
        String extName= eName.substring(eName.lastIndexOf("."));
        String regexExt = ".(png|jpg|jpeg|gif)$";
        if (!extName.matches(regexExt)){
            //进入if表示尾缀不合法
            //同时调用PicUploadResult工具类里的error返回方法
            result.setError(1);
            return result;
        }
        //生成一个path路径 在存储时用到,url拼接也用到
        String path = UploadUtil.getUploadPath(eName,"/hk")+"/";
        //生成磁盘目录:d:/hkimg/
        //将本地目录和path路径拼接在一起
        String dir = "d:/hkimg"+path;
        //目录dir不存在时才创建
        File _dir=new File(dir);
        if (!_dir.exists()){
            //如果进入if说明多级目录不存在
            _dir.mkdirs();
        }
        //将图片写入到这个目录中
        //重命名一个存储在该路径下的文件名称 hk+时间+8129 uuid
        String nName = UUID.randomUUID().toString()+extName;
        try{
            pic.transferTo(new File(dir+nName));
        }catch (Exception e){
            e.printStackTrace();
            result.setError(1);
            return result;
        }
        //生成图片url访问地址
        String url="http://imghk.com/"+path+nName;
        result.setUrl(url);
        return result;
    }
}
